Beatsを使ってみた(まとめ編)
はじめに
藤本です。
先日、Beatsの3つのofficialy supported Beatsのやってみたブログをエントリしました。
- Topbeat + boot2dockerでMacBookのシステムモニタリング
- Filebeat + boot2dockerでMacBookのログモニタリング
- Packetbeatでパケットモニタリング
ブログエントリの順番が完全に逆ですが、やってみたエントリでは説明をすっとばしていたので、今回はそれぞれの機能を簡単にご紹介します。
Beatsについて
各々の説明の前にBeats Platformを説明します。
Beatsはデータ取り込みを行うプラットフォームとなります。Elasticの馴染みのあるデータ取り込みツールにLogstashがあります。日本ではFluentdを使われている方が多いでしょうか。Logstashは非常に豊富な機能を持っていて、更にプラグインを追加することで更なる機能拡張が可能となるパワフルなデータ取り込みツールです。それに比べて、Beatsはそれぞれがあるインプットに特化したシンプル・軽量なデータ取り込みツールです。
主な特徴として、以下があります。
- 機能をシンプルにしているため色々軽い
- Go言語実装による軽量なフットプリント(JVM不要)
- 設定ファイルがYAML形式
- マルチプラットフォーム
- 出力処理は共通ライブラリ利用
公式にBeats Platformの図があります。
Beats Platformは出力処理をlibbeatという共通ライブラリで実装しています。入力処理は各Beatsで実装し、各Beatsはlibbeatを内包しています。前回のエントリでは全てlibbeatの出力先にElasticsearchを指定しましたが、フィルター、加工といった処理を行いたい場合、一度Logstashを経由することも可能です。libbeatは出力先にLogstashを指定することが可能であり、Logstashはbeatsの入力プラグインを持っています。
ご紹介したPacketbeat、Topbeat、Filebeat以外にもコミュニティで開発されているBeatsがあります。
Packetbeat
PacketbeatはWebアクセス、DB操作など様々なネットワークトラフィックをリアルタイムで取り込むツールです。PacketbeatはBeatsがリリースされる前からElasticのプロダクトにありました。私は当初、名前とこの説明だけで、tcpdumpのようなものを想像していたのですが、大分、想像の上をいったツールでした。例えば、DB操作であれば、送信元/送信先のIPアドレス/ポートだけでなく、SQL文、それに対するクエリタイム、処理したテーブルの行数など、想像以上に深いデータを取得できました。このデータをElasticsearchに取り込み、Kibanaで可視化すれば、MySQLでいう一般ログやスロークエリログの情報を可視化できます。Webアクセスも送信元/送信先のIPアドレス/ポートだけでなく、アクセスしたURL、それに対するレスポンスタイムを取得できます。
まずどのようなダッシュボードが見れるのかPacketbeatでパケットモニタリングを参照してみてください。
2015/12/19現在は以下のプロトコルに対応しています。
- HTTP
- MySQL
- PostgreSQL
- Redis
- Thrift-RPC
- MongoDB
- DNS
- Memcache
先日開催されたElastic{ON} Tour 2015 in Tokyoではロードマップとして、以下のプロトコルの実装を予定していると発表がありました。
- ICMP
- AMQP
今後も様々なプロトコルへの対応の期待が高まります!
Topbeat
TopbeatはOSの各種リソースを取り込むツールです。名前の通り、topコマンドで取得できようなリソースを取得可能です。現在取得可能なリソースは大きく3パターンがあります。
- System
システムレベルのリソースを取得できます。まさにtopコマンドで取得可能なリソースです。- CPU使用状況
- MEM使用状況
- ロードアベレージ
- スワップ領域使用状況
- Process
プロセスレベルのリソースを取得できます。設定ファイルで対象とするプロセス名を指定できます。- プロセス名
- プロセスステータス
- CPU使用状況
- MEM使用状況
- PID/PPID
- Filesystem
ファイルシステムの使用状況を取得できます。OSが認識しているファイルシステム全てを対象とします。- デバイス名
- マウントポイント
- ファイル数
- ディスク使用状況
これらの表示する/しないは全て設定ファイルで指定できます。
また取得するインターバルも指定できます。
Filebeat
Filebeatはログファイルのメッセージを取り込むツールです。LogstashのFile Input Plugin+少しのFilter Pluginです(雑。。)元々、Logstashのログファイル取り込みに特化したGo言語実装の軽量ツールとしてlogstash-forwarderが開発されていました。こちらをBeats Platformへ移行したものがFilebeatとなります。設定ファイルで指定したログファイルを取り込み、およびElasticsearchのドキュメントタイプの指定や任意のフィールド追加が可能です。
現状はログファイルの取り込みに特化しており、加工やフィルターといった処理が実装されていません。そのため、access_logにgrokフィルターでスキーマ化して、数値の型変換して、閾値を下回るレスポンスタイムはドロップするようなことはできません。そうした加工やフィルター処理を実施したい場合、一度、Logstashに出力し、LogstashのFilter Pluginで処理し、Elasticsearchへ出力することで実装可能です。Logstashに集約することで処理負荷が心配な場合、RedisやKafkaにキューイングして、複数LogstashでRedis/KafkaのInput Pluginを利用して、分散処理することでスケールするテクニックもあるようです。
まとめ
簡単にですが、Beats Platform、および各Beatsをご紹介しました。
Elastic社の製品はリリーススピードが非常に早く、各プロダクトの機能に追いつくのは大変です!でも新機能が目を引くものばかりで追いかけずにはいられません。今後も追いかけていきます。